package com.example.cybz.acl.utils;

import com.example.cybz.model.acl.Permission;

import java.util.ArrayList;
import java.util.List;
import java.util.Objects;

public class PermissionHelper {

    private PermissionHelper(){}

    /**
     * 构建权限树的根节点
     * @param permissionList 所有权限的列表
     * @return 构建好的根权限列表
     */
    public static List<Permission> buildPermission(List<Permission> permissionList){
        ArrayList<Permission> objects = new ArrayList<>();
        for(Permission permission: permissionList){
            if (permission.getPid() == 0){
                // 设置根节点层级为1
                permission.setLevel(1);
                // 递归查找并设置子节点
                objects.add(grandchildren(permission, permissionList));
            }
        }
        return objects;
    }

    /**
     * 递归构建权限树的子节点
     * @param permission 当前要处理的权限节点
     * @param permissionList 所有权限的列表
     * @return 处理后的权限节点，包含其子节点
     */
    private static Permission grandchildren(Permission permission, List<Permission> permissionList) {
        // 初始化子节点列表
        permission.setChildren(new ArrayList<>());
        for(Permission permission1 : permissionList){
            if (permission1.getPid().equals(permission.getId())){
                // 设置子节点层级为当前节点层级+1
                permission1.setLevel(permission.getLevel()+1);
                if (Objects.isNull(permission.getChildren())){
                    permission.setChildren(new ArrayList<>());
                }
                // 递归处理子节点
                permission.getChildren().add(grandchildren(permission1, permissionList));
            }
        }
        return permission;
    }

}
